home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / term-source.lha / FastMacroPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  21.6 KB  |  977 lines

  1. /*
  2. **    FastMacroPanel.c
  3. **
  4. **    Editing panel for fast! macros
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_LIST,GAD_MACRO,GAD_CODE,
  17.             GAD_TOP,GAD_UP,GAD_DOWN,GAD_END,
  18.             GAD_NEW,GAD_REMOVE,GAD_CLEAR,
  19.             GAD_LOAD,GAD_SAVE,GAD_USE,GAD_CLOSE,
  20.             GAD_DISCARD
  21.         };
  22.  
  23. BOOL
  24. FastMacroPanelConfig(struct Configuration *LocalConfig,struct List *FastMacroList,STRPTR LastFastMacros,struct Window *Parent,BOOLEAN *ChangedPtr)
  25. {
  26.     struct LayoutHandle    *Handle;
  27.     BOOL                 Changed = FALSE;
  28.  
  29.     if(Handle = LT_CreateHandleTags(Parent -> WScreen,
  30.         LH_LocaleHook,    &LocaleHook,
  31.     TAG_DONE))
  32.     {
  33.         struct Window    *FastWindow;
  34.         struct IBox         Bounds;
  35.         LONG             FastMacroCount;
  36.  
  37.         FastMacroCount = GetListSize(FastMacroList);
  38.  
  39.         LT_New(Handle,
  40.             LA_Type,VERTICAL_KIND,
  41.         TAG_DONE);
  42.         {
  43.             LT_New(Handle,
  44.                 LA_Type,    VERTICAL_KIND,
  45.                 LA_LabelID,    MSG_V36_0037,
  46.             TAG_DONE);
  47.             {
  48.                 LONG MaxWidth,MaxHeight;
  49.  
  50.                 MaxWidth = MaxHeight = 0;
  51.  
  52.                 if(FastMacroList)
  53.                 {
  54.                     struct Node *Node;
  55.                     LONG Len;
  56.  
  57.                     for(Node = FastMacroList -> lh_Head ; Node -> ln_Succ ; Node = Node -> ln_Succ)
  58.                     {
  59.                         Len = strlen(Node -> ln_Name);
  60.  
  61.                         if(Len > MaxWidth)
  62.                             MaxWidth = Len;
  63.  
  64.                         MaxHeight++;
  65.                     }
  66.                 }
  67.  
  68.                 if(MaxWidth < 30)
  69.                     MaxWidth = 30;
  70.  
  71.                 if(MaxHeight < 10)
  72.                     MaxHeight = 10;
  73.                 else
  74.                 {
  75.                     if(MaxHeight > 20)
  76.                         MaxHeight = 20;
  77.                 }
  78.  
  79.                 LT_New(Handle,
  80.                     LA_Type,        LISTVIEW_KIND,
  81.                     LA_LabelID,        MSG_FASTMACROPANEL_MACRO_LIST_GAD,
  82.                     LA_LabelPlace,    PLACE_LEFT,
  83.                     LA_Chars,        30,
  84.                     LA_Lines,        10,
  85.                     LA_ID,            GAD_LIST,
  86.                     LALV_CursorKey,    TRUE,
  87.                     LALV_MaxGrowY,    MaxHeight,
  88.                     LALV_MaxGrowX,    MaxWidth,
  89.                     LALV_ResizeX,    TRUE,
  90.                     LALV_ResizeY,    TRUE,
  91.                     GTLV_Labels,    FastMacroList,
  92.  
  93.                     Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  94.                 TAG_DONE);
  95.  
  96.                 LT_New(Handle,
  97.                     LA_Type,        STRING_KIND,
  98.                     LA_LabelID,        MSG_FASTMACROPANEL_MACRO_GAD,
  99.                     LA_ID,            GAD_MACRO,
  100.                     GTST_MaxChars,    20,
  101.                     GA_Disabled,    TRUE,
  102.                 TAG_DONE);
  103.  
  104.                 LT_New(Handle,
  105.                     LA_Type,        STRING_KIND,
  106.                     LA_LabelID,        MSG_FASTMACROPANEL_MACRO_TEXT_GAD,
  107.                     LA_ID,            GAD_CODE,
  108.                     GTST_MaxChars,    255,
  109.                     GA_Disabled,    TRUE,
  110.                 TAG_DONE);
  111.  
  112.                 LT_EndGroup(Handle);
  113.             }
  114.  
  115.             LT_New(Handle,
  116.                 LA_Type,HORIZONTAL_KIND,
  117.             TAG_DONE);
  118.             {
  119.                 LT_New(Handle,
  120.                     LA_Type,        HORIZONTAL_KIND,
  121.                     LA_LabelID,        MSG_V36_0038,
  122.                     LA_Spread,        TRUE,
  123.                     LA_SameSize,    TRUE,
  124.                 TAG_DONE);
  125.                 {
  126.                     LT_New(Handle,
  127.                         LA_Type,        TAPEDECK_KIND,
  128.                         LATD_ButtonType,TDBT_PREVIOUS,
  129.                         LATD_Smaller,    TRUE,
  130.                         LA_ID,            GAD_TOP,
  131.                         LA_NoKey,        TRUE,
  132.                         GA_Disabled,    TRUE,
  133.                     TAG_DONE);
  134.  
  135.                     LT_New(Handle,
  136.                         LA_Type,        TAPEDECK_KIND,
  137.                         LATD_ButtonType,TDBT_REWIND,
  138.                         LATD_Smaller,    TRUE,
  139.                         LA_ID,            GAD_UP,
  140.                         LA_NoKey,        TRUE,
  141.                         GA_Disabled,    TRUE,
  142.                     TAG_DONE);
  143.  
  144.                     LT_New(Handle,
  145.                         LA_Type,        TAPEDECK_KIND,
  146.                         LATD_ButtonType,TDBT_PLAY,
  147.                         LATD_Smaller,    TRUE,
  148.                         LA_ID,            GAD_DOWN,
  149.                         LA_NoKey,        TRUE,
  150.                         GA_Disabled,    TRUE,
  151.                     TAG_DONE);
  152.  
  153.                     LT_New(Handle,
  154.                         LA_Type,        TAPEDECK_KIND,
  155.                         LATD_ButtonType,TDBT_NEXT,
  156.                         LATD_Smaller,    TRUE,
  157.                         LA_ID,            GAD_END,
  158.                         LA_NoKey,        TRUE,
  159.                         GA_Disabled,    TRUE,
  160.                     TAG_DONE);
  161.  
  162.                     LT_EndGroup(Handle);
  163.                 }
  164.  
  165.                 LT_New(Handle,
  166.                     LA_Type,        HORIZONTAL_KIND,
  167.                     LA_LabelID,        MSG_V36_0043,
  168.                     LA_Spread,        TRUE,
  169.                     LA_SameSize,    TRUE,
  170.                 TAG_DONE);
  171.                 {
  172.                     LT_New(Handle,
  173.                         LA_Type,        BUTTON_KIND,
  174.                         LA_LabelID,        MSG_FASTMACROPANEL_NEW_GAD,
  175.                         LA_ID,            GAD_NEW,
  176.                     TAG_DONE);
  177.  
  178.                     LT_New(Handle,
  179.                         LA_Type,        BUTTON_KIND,
  180.                         LA_LabelID,        MSG_GLOBAL_REMOVE_GAD,
  181.                         LA_ID,            GAD_REMOVE,
  182.                         GA_Disabled,    TRUE,
  183.                     TAG_DONE);
  184.  
  185.                     LT_New(Handle,
  186.                         LA_Type,        BUTTON_KIND,
  187.                         LA_LabelID,        MSG_UPLOADQUEUE_CLEAR_TXT,
  188.                         LA_ID,            GAD_CLEAR,
  189.                         GA_Disabled,    FastMacroList -> lh_Head -> ln_Succ == NULL,
  190.                     TAG_DONE);
  191.  
  192.                     LT_EndGroup(Handle);
  193.                 }
  194.  
  195.                 LT_EndGroup(Handle);
  196.             }
  197.  
  198.             LT_New(Handle,
  199.                 LA_Type,VERTICAL_KIND,
  200.             TAG_DONE);
  201.             {
  202.                 LT_New(Handle,
  203.                     LA_Type,        XBAR_KIND,
  204.                     LAXB_FullSize,    TRUE,
  205.                 TAG_DONE);
  206.  
  207.                 LT_EndGroup(Handle);
  208.             }
  209.  
  210.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  211.                 LAGR_SameSize,    TRUE,
  212.                 LAGR_Spread,    TRUE,
  213.                 LA_ExtraSpace,    TRUE,
  214.             TAG_DONE);
  215.             {
  216.                 LT_New(Handle,
  217.                     LA_Type,        BUTTON_KIND,
  218.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  219.                     LA_ID,            GAD_USE,
  220.                     LABT_ReturnKey,    TRUE,
  221.                     LABT_ExtraFat,    TRUE,
  222.                 TAG_DONE);
  223.  
  224.                 LT_New(Handle,
  225.                     LA_Type,        BUTTON_KIND,
  226.                     LA_LabelID,        MSG_GLOBAL_LOAD_GAD,
  227.                     LA_ID,            GAD_LOAD,
  228.                 TAG_DONE);
  229.  
  230.                 LT_New(Handle,
  231.                     LA_Type,        BUTTON_KIND,
  232.                     LA_LabelID,        MSG_GLOBAL_SAVE_GAD,
  233.                     LA_ID,            GAD_SAVE,
  234.                     GA_Disabled,    FastMacroList -> lh_Head -> ln_Succ == NULL,
  235.                 TAG_DONE);
  236.  
  237.                 LT_New(Handle,
  238.                     LA_Type,        BUTTON_KIND,
  239.                     LA_LabelID,        MSG_DISCARD_GAD,
  240.                     LA_ID,            GAD_DISCARD,
  241.                 TAG_DONE);
  242.  
  243.                 LT_New(Handle,
  244.                     LA_Type,        BUTTON_KIND,
  245.                     LA_LabelID,        MSG_GLOBAL_CLOSE_TXT,
  246.                     LA_ID,            GAD_CLOSE,
  247.                     LABT_EscKey,    TRUE,
  248.                 TAG_DONE);
  249.  
  250.                 LT_EndGroup(Handle);
  251.             }
  252.  
  253.             LT_EndGroup(Handle);
  254.         }
  255.  
  256.         if(Screen && Window)
  257.         {
  258.             Bounds . Left    = Window -> LeftEdge;
  259.             Bounds . Top    = Window -> TopEdge;
  260.             Bounds . Width    = Window -> Width;
  261.             Bounds . Height    = Window -> Height;
  262.         }
  263.  
  264.         if(FastWindow = LT_Build(Handle,
  265.             LAWN_TitleID,        MSG_FASTMACROPANEL_FAST_MACRO_PREFERENCES_TXT,
  266.             LAWN_IDCMP,            IDCMP_CLOSEWINDOW,
  267.             LAWN_HelpHook,        &GuideHook,
  268.             LAWN_Parent,        Parent,
  269.             WA_DepthGadget,        TRUE,
  270.             WA_CloseGadget,        TRUE,
  271.             WA_DragBar,            TRUE,
  272.             WA_RMBTrap,            TRUE,
  273.             WA_Activate,        TRUE,
  274.             WA_SimpleRefresh,    TRUE,
  275.  
  276.             Screen ? LAWN_Bounds : TAG_IGNORE,&Bounds,
  277.         TAG_DONE))
  278.         {
  279.             struct IntuiMessage        *Message;
  280.             BOOL                     Done = FALSE;
  281.             ULONG                     MsgClass;
  282.             UWORD                     MsgCode;
  283.             struct Gadget            *MsgGadget;
  284.  
  285.             struct MacroNode        *Node,*Selected = NULL;
  286.             ULONG                     Offset = 0;
  287.  
  288.             UBYTE                      DummyBuffer[MAX_FILENAME_LENGTH],
  289.                                     *DummyChar;
  290.             struct FileRequester    *FileRequest;
  291.  
  292.             GuideContext(CONTEXT_FASTMACROS);
  293.  
  294.             PushWindow(FastWindow);
  295.  
  296.             LT_ShowWindow(Handle,TRUE);
  297.  
  298.             do
  299.             {
  300.                 if(Wait(PORTMASK(FastWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  301.                     break;
  302.  
  303.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  304.                 {
  305.                     MsgClass    = Message -> Class;
  306.                     MsgCode        = Message -> Code;
  307.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  308.  
  309.                     LT_ReplyIMsg(Message);
  310.  
  311.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  312.                         Done = TRUE;
  313.  
  314.                     if(MsgClass == IDCMP_GADGETUP)
  315.                     {
  316.                         switch(MsgGadget -> GadgetID)
  317.                         {
  318.                             case GAD_CLOSE:
  319.                             case GAD_USE:
  320.  
  321.                                 if(Selected)
  322.                                 {
  323.                                     strcpy(Selected->mn_Macro,LT_GetString(Handle,GAD_MACRO));
  324.                                     strcpy(Selected->mn_Code,LT_GetString(Handle,GAD_CODE));
  325.                                 }
  326.  
  327.                                 Done = TRUE;
  328.                                 break;
  329.  
  330.                             case GAD_TOP:
  331.  
  332.                                 LT_SetAttributes(Handle,GAD_LIST,
  333.                                     GTLV_Labels,    ~0,
  334.                                 TAG_DONE);
  335.  
  336.                                 Remove((struct Node *)Selected);
  337.  
  338.                                 AddHead(FastMacroList,(struct Node *)Selected);
  339.  
  340.                                 Offset = 0;
  341.  
  342.                                 LT_SetAttributes(Handle,GAD_LIST,
  343.                                     GTLV_Labels,    FastMacroList,
  344.                                     GTLV_Selected,    Offset,
  345.                                     GTLV_Top,        Offset,
  346.                                 TAG_DONE);
  347.  
  348.                                 LT_SetAttributes(Handle,GAD_TOP,
  349.                                     GA_Disabled,    TRUE,
  350.                                 TAG_DONE);
  351.  
  352.                                 LT_SetAttributes(Handle,GAD_UP,
  353.                                     GA_Disabled,    TRUE,
  354.                                 TAG_DONE);
  355.  
  356.                                 LT_SetAttributes(Handle,GAD_DOWN,
  357.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  358.                                 TAG_DONE);
  359.  
  360.                                 LT_SetAttributes(Handle,GAD_END,
  361.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  362.                                 TAG_DONE);
  363.  
  364.                                 Changed = TRUE;
  365.  
  366.                                 if(ChangedPtr)
  367.                                     *ChangedPtr = TRUE;
  368.  
  369.                                 break;
  370.  
  371.                             case GAD_UP:
  372.  
  373.                                 LT_SetAttributes(Handle,GAD_LIST,
  374.                                     GTLV_Labels,    ~0,
  375.                                 TAG_DONE);
  376.  
  377.                                 Node = Selected -> mn_Pred -> mn_Pred;
  378.  
  379.                                 Remove((struct Node *)Selected);
  380.  
  381.                                 Insert(FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  382.  
  383.                                 Offset--;
  384.  
  385.                                 LT_SetAttributes(Handle,GAD_LIST,
  386.                                     GTLV_Labels,    FastMacroList,
  387.                                     GTLV_Selected,    Offset,
  388.                                     GTLV_Top,        Offset,
  389.                                 TAG_DONE);
  390.  
  391.                                 LT_SetAttributes(Handle,GAD_TOP,
  392.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  393.                                 TAG_DONE);
  394.  
  395.                                 LT_SetAttributes(Handle,GAD_UP,
  396.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  397.                                 TAG_DONE);
  398.  
  399.                                 LT_SetAttributes(Handle,GAD_DOWN,
  400.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  401.                                 TAG_DONE);
  402.  
  403.                                 LT_SetAttributes(Handle,GAD_END,
  404.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  405.                                 TAG_DONE);
  406.  
  407.                                 Changed = TRUE;
  408.  
  409.                                 if(ChangedPtr)
  410.                                     *ChangedPtr = TRUE;
  411.  
  412.                                 break;
  413.  
  414.                             case GAD_DOWN:
  415.  
  416.                                 LT_SetAttributes(Handle,GAD_LIST,
  417.                                     GTLV_Labels,    ~0,
  418.                                 TAG_DONE);
  419.  
  420.                                 Node = Selected -> mn_Succ;
  421.  
  422.                                 Remove((struct Node *)Selected);
  423.  
  424.                                 Insert(FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  425.  
  426.                                 Offset++;
  427.  
  428.                                 LT_SetAttributes(Handle,GAD_LIST,
  429.                                     GTLV_Labels,    FastMacroList,
  430.                                     GTLV_Selected,    Offset,
  431.                                     GTLV_Top,        Offset,
  432.                                 TAG_DONE);
  433.  
  434.                                 LT_SetAttributes(Handle,GAD_TOP,
  435.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  436.                                 TAG_DONE);
  437.  
  438.                                 LT_SetAttributes(Handle,GAD_UP,
  439.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  440.                                 TAG_DONE);
  441.  
  442.                                 LT_SetAttributes(Handle,GAD_DOWN,
  443.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  444.                                 TAG_DONE);
  445.  
  446.                                 LT_SetAttributes(Handle,GAD_END,
  447.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  448.                                 TAG_DONE);
  449.  
  450.                                 Changed = TRUE;
  451.  
  452.                                 if(ChangedPtr)
  453.                                     *ChangedPtr = TRUE;
  454.  
  455.                                 break;
  456.  
  457.                             case GAD_END:
  458.  
  459.                                 LT_SetAttributes(Handle,GAD_LIST,
  460.                                     GTLV_Labels,    ~0,
  461.                                 TAG_DONE);
  462.  
  463.                                 Remove((struct Node *)Selected);
  464.  
  465.                                 AddTail(FastMacroList,(struct Node *)Selected);
  466.  
  467.                                 Offset = FastMacroCount - 1;
  468.  
  469.                                 LT_SetAttributes(Handle,GAD_LIST,
  470.                                     GTLV_Labels,    FastMacroList,
  471.                                     GTLV_Selected,    Offset,
  472.                                     GTLV_Top,        Offset,
  473.                                 TAG_DONE);
  474.  
  475.                                 LT_SetAttributes(Handle,GAD_TOP,
  476.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  477.                                 TAG_DONE);
  478.  
  479.                                 LT_SetAttributes(Handle,GAD_UP,
  480.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  481.                                 TAG_DONE);
  482.  
  483.                                 LT_SetAttributes(Handle,GAD_DOWN,
  484.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  485.                                 TAG_DONE);
  486.  
  487.                                 LT_SetAttributes(Handle,GAD_END,
  488.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  489.                                 TAG_DONE);
  490.  
  491.                                 Changed = TRUE;
  492.  
  493.                                 if(ChangedPtr)
  494.                                     *ChangedPtr = TRUE;
  495.  
  496.                                 break;
  497.  
  498.                             case GAD_NEW:
  499.  
  500.                                 if(Selected)
  501.                                 {
  502.                                     strcpy(Selected->mn_Macro,LT_GetString(Handle,GAD_MACRO));
  503.                                     strcpy(Selected->mn_Code,LT_GetString(Handle,GAD_CODE));
  504.                                 }
  505.  
  506.                                 if(Node = NewFastMacro(LocaleString(MSG_FASTMACROPANEL_UNNAMED_TXT),""))
  507.                                 {
  508.                                     LT_SetAttributes(Handle,GAD_LIST,
  509.                                         GTLV_Labels,    ~0,
  510.                                     TAG_DONE);
  511.  
  512.                                     AddTail(FastMacroList,(struct Node *)Node);
  513.  
  514.                                     LT_SetAttributes(Handle,GAD_LIST,
  515.                                         GTLV_Labels,    FastMacroList,
  516.                                         GTLV_Selected,    FastMacroCount++,
  517.                                     TAG_DONE);
  518.  
  519.                                     LT_SetAttributes(Handle,GAD_CODE,
  520.                                         GTST_String,    "",
  521.                                         GA_Disabled,    FALSE,
  522.                                     TAG_DONE);
  523.  
  524.                                     LT_SetAttributes(Handle,GAD_MACRO,
  525.                                         GTST_String,    Node -> mn_Macro,
  526.                                         GA_Disabled,    FALSE,
  527.                                     TAG_DONE);
  528.  
  529.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  530.                                         GA_Disabled,    FALSE,
  531.                                     TAG_DONE);
  532.  
  533.                                     LT_SetAttributes(Handle,GAD_SAVE,
  534.                                         GA_Disabled,    FALSE,
  535.                                     TAG_DONE);
  536.  
  537.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  538.                                         GA_Disabled,    FALSE,
  539.                                     TAG_DONE);
  540.  
  541.                                     Selected = Node;
  542.  
  543.                                     Offset = MsgCode;
  544.  
  545.                                     LT_SetAttributes(Handle,GAD_TOP,
  546.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  547.                                     TAG_DONE);
  548.  
  549.                                     LT_SetAttributes(Handle,GAD_UP,
  550.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  551.                                     TAG_DONE);
  552.  
  553.                                     LT_SetAttributes(Handle,GAD_DOWN,
  554.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  555.                                     TAG_DONE);
  556.  
  557.                                     LT_SetAttributes(Handle,GAD_END,
  558.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  559.                                     TAG_DONE);
  560.  
  561.                                     LT_Activate(Handle,GAD_MACRO);
  562.  
  563.                                     Changed = TRUE;
  564.  
  565.                                     if(ChangedPtr)
  566.                                         *ChangedPtr = TRUE;
  567.                                 }
  568.                                 else
  569.                                     DisplayBeep(FastWindow -> WScreen);
  570.  
  571.                                 break;
  572.  
  573.                             case GAD_DISCARD:
  574.  
  575.                                 LT_SetAttributes(Handle,GAD_LIST,
  576.                                     GTLV_Labels,    ~0,
  577.                                 TAG_DONE);
  578.  
  579.                                 FreeList(FastMacroList);
  580.  
  581.                                 FastMacroCount = 0;
  582.  
  583.                                 Done = Changed = TRUE;
  584.  
  585.                                 if(ChangedPtr)
  586.                                     *ChangedPtr = FALSE;
  587.  
  588.                                 LastFastMacros[0] = 0;
  589.  
  590.                                 if(LocalConfig)
  591.                                     strcpy(LocalConfig->FastMacroFileName,LastFastMacros);
  592.  
  593.                                 break;
  594.  
  595.                             case GAD_CLEAR:
  596.  
  597.                                 LT_SetAttributes(Handle,GAD_LIST,
  598.                                     GTLV_Labels,    ~0,
  599.                                 TAG_DONE);
  600.  
  601.                                 FreeList(FastMacroList);
  602.  
  603.                                 FastMacroCount = 0;
  604.  
  605.                                 LT_SetAttributes(Handle,GAD_LIST,
  606.                                     GTLV_Labels,    FastMacroList,
  607.                                     GTLV_Selected,    ~0,
  608.                                 TAG_DONE);
  609.  
  610.                                 Selected = NULL;
  611.  
  612.                                 LT_SetAttributes(Handle,GAD_TOP,
  613.                                     GA_Disabled,    TRUE,
  614.                                 TAG_DONE);
  615.  
  616.                                 LT_SetAttributes(Handle,GAD_UP,
  617.                                     GA_Disabled,    TRUE,
  618.                                 TAG_DONE);
  619.  
  620.                                 LT_SetAttributes(Handle,GAD_DOWN,
  621.                                     GA_Disabled,    TRUE,
  622.                                 TAG_DONE);
  623.  
  624.                                 LT_SetAttributes(Handle,GAD_END,
  625.                                     GA_Disabled,    TRUE,
  626.                                 TAG_DONE);
  627.  
  628.                                 LT_SetAttributes(Handle,GAD_REMOVE,
  629.                                     GA_Disabled,    TRUE,
  630.                                 TAG_DONE);
  631.  
  632.                                 LT_SetAttributes(Handle,GAD_MACRO,
  633.                                     GTST_String,    "",
  634.                                     GA_Disabled,    TRUE,
  635.                                 TAG_DONE);
  636.  
  637.                                 LT_SetAttributes(Handle,GAD_CODE,
  638.                                     GTST_String,    "",
  639.                                     GA_Disabled,    TRUE,
  640.                                 TAG_DONE);
  641.  
  642.                                 LT_SetAttributes(Handle,GAD_SAVE,
  643.                                     GA_Disabled,    TRUE,
  644.                                 TAG_DONE);
  645.  
  646.                                 LT_SetAttributes(Handle,GAD_CLEAR,
  647.                                     GA_Disabled,    TRUE,
  648.                                 TAG_DONE);
  649.  
  650.                                 Changed = TRUE;
  651.  
  652.                                 if(ChangedPtr)
  653.                                     *ChangedPtr = FALSE;
  654.  
  655.                                 break;
  656.  
  657.                             case GAD_REMOVE:
  658.  
  659.                                 if(Selected)
  660.                                 {
  661.                                     LT_SetAttributes(Handle,GAD_LIST,
  662.                                         GTLV_Labels,    ~0,
  663.                                     TAG_DONE);
  664.  
  665.                                     if(--FastMacroCount)
  666.                                     {
  667.                                         if(Selected -> mn_Succ -> mn_Succ)
  668.                                             Node = Selected -> mn_Succ;
  669.                                         else
  670.                                         {
  671.                                             Node = Selected -> mn_Pred;
  672.  
  673.                                             Offset = 0;
  674.                                         }
  675.                                     }
  676.  
  677.                                     FreeNode((struct Node *)Selected);
  678.  
  679.                                     LT_SetAttributes(Handle,GAD_LIST,
  680.                                         GTLV_Labels,    FastMacroList,
  681.                                         GTLV_Selected,    FastMacroCount > 0 ? GetNodeOffset((struct Node *)Node,FastMacroList) : ~0,
  682.                                     TAG_DONE);
  683.  
  684.                                     if(!FastMacroCount)
  685.                                     {
  686.                                         Selected = NULL;
  687.  
  688.                                         LT_SetAttributes(Handle,GAD_TOP,
  689.                                             GA_Disabled,    TRUE,
  690.                                         TAG_DONE);
  691.  
  692.                                         LT_SetAttributes(Handle,GAD_UP,
  693.                                             GA_Disabled,    TRUE,
  694.                                         TAG_DONE);
  695.  
  696.                                         LT_SetAttributes(Handle,GAD_DOWN,
  697.                                             GA_Disabled,    TRUE,
  698.                                         TAG_DONE);
  699.  
  700.                                         LT_SetAttributes(Handle,GAD_END,
  701.                                             GA_Disabled,    TRUE,
  702.                                         TAG_DONE);
  703.  
  704.                                         LT_SetAttributes(Handle,GAD_REMOVE,
  705.                                             GA_Disabled,    TRUE,
  706.                                         TAG_DONE);
  707.  
  708.                                         LT_SetAttributes(Handle,GAD_MACRO,
  709.                                             GTST_String,    "",
  710.                                             GA_Disabled,    TRUE,
  711.                                         TAG_DONE);
  712.  
  713.                                         LT_SetAttributes(Handle,GAD_CODE,
  714.                                             GTST_String,    "",
  715.                                             GA_Disabled,    TRUE,
  716.                                         TAG_DONE);
  717.  
  718.                                         LT_SetAttributes(Handle,GAD_SAVE,
  719.                                             GA_Disabled,    TRUE,
  720.                                         TAG_DONE);
  721.  
  722.                                         LT_SetAttributes(Handle,GAD_CLEAR,
  723.                                             GA_Disabled,    TRUE,
  724.                                         TAG_DONE);
  725.                                     }
  726.                                     else
  727.                                     {
  728.                                         Selected = Node;
  729.  
  730.                                         LT_SetAttributes(Handle,GAD_CODE,
  731.                                             GTST_String,    Selected -> mn_Code,
  732.                                         TAG_DONE);
  733.  
  734.                                         LT_SetAttributes(Handle,GAD_MACRO,
  735.                                             GTST_String,    Selected -> mn_Macro,
  736.                                         TAG_DONE);
  737.  
  738.                                         LT_SetAttributes(Handle,GAD_TOP,
  739.                                             GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  740.                                         TAG_DONE);
  741.  
  742.                                         LT_SetAttributes(Handle,GAD_UP,
  743.                                             GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  744.                                         TAG_DONE);
  745.  
  746.                                         LT_SetAttributes(Handle,GAD_DOWN,
  747.                                             GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  748.                                         TAG_DONE);
  749.  
  750.                                         LT_SetAttributes(Handle,GAD_END,
  751.                                             GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  752.                                         TAG_DONE);
  753.                                     }
  754.  
  755.                                     Changed = TRUE;
  756.  
  757.                                     if(ChangedPtr)
  758.                                         *ChangedPtr = TRUE;
  759.                                 }
  760.  
  761.                                 break;
  762.  
  763.                             case GAD_LIST:
  764.  
  765.                                 if(Selected)
  766.                                 {
  767.                                     strcpy(Selected->mn_Macro,LT_GetString(Handle,GAD_MACRO));
  768.                                     strcpy(Selected->mn_Code,LT_GetString(Handle,GAD_CODE));
  769.                                 }
  770.  
  771.                                 if(Selected = (struct MacroNode *)GetListNode(MsgCode,FastMacroList))
  772.                                 {
  773.                                     Offset = MsgCode;
  774.  
  775.                                     LT_SetAttributes(Handle,GAD_MACRO,
  776.                                         GTST_String,    Selected -> mn_Macro,
  777.                                         GA_Disabled,    FALSE,
  778.                                     TAG_DONE);
  779.  
  780.                                     LT_SetAttributes(Handle,GAD_CODE,
  781.                                         GTST_String,    Selected -> mn_Code,
  782.                                         GA_Disabled,    FALSE,
  783.                                     TAG_DONE);
  784.  
  785.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  786.                                         GA_Disabled,    FALSE,
  787.                                     TAG_DONE);
  788.  
  789.                                     LT_SetAttributes(Handle,GAD_TOP,
  790.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  791.                                     TAG_DONE);
  792.  
  793.                                     LT_SetAttributes(Handle,GAD_UP,
  794.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  795.                                     TAG_DONE);
  796.  
  797.                                     LT_SetAttributes(Handle,GAD_DOWN,
  798.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  799.                                     TAG_DONE);
  800.  
  801.                                     LT_SetAttributes(Handle,GAD_END,
  802.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  803.                                     TAG_DONE);
  804.                                 }
  805.  
  806.                                 break;
  807.  
  808.                             case GAD_MACRO:
  809.  
  810.                                 if(Selected)
  811.                                 {
  812.                                     LT_SetAttributes(Handle,GAD_LIST,
  813.                                         GTLV_Labels,    ~0,
  814.                                     TAG_DONE);
  815.  
  816.                                     strcpy(Selected -> mn_Macro,(STRPTR)LT_GetAttributes(Handle,GAD_MACRO,TAG_DONE));
  817.  
  818.                                     LT_SetAttributes(Handle,GAD_LIST,
  819.                                         GTLV_Labels,    FastMacroList,
  820.                                         GTLV_Selected,    GetNodeOffset((struct Node *)Selected,FastMacroList),
  821.                                     TAG_DONE);
  822.  
  823.                                     LT_SetAttributes(Handle,GAD_CODE,
  824.                                         GTST_String,    Selected -> mn_Code,
  825.                                     TAG_DONE);
  826.  
  827.                                     Changed = TRUE;
  828.  
  829.                                     if(ChangedPtr)
  830.                                         *ChangedPtr = TRUE;
  831.  
  832.                                     LT_Activate(Handle,GAD_CODE);
  833.                                 }
  834.  
  835.                                 break;
  836.  
  837.                             case GAD_CODE:
  838.  
  839.                                 if(Selected)
  840.                                 {
  841.                                     strcpy(Selected -> mn_Code,(STRPTR)LT_GetAttributes(Handle,GAD_CODE,TAG_DONE));
  842.  
  843.                                     Changed = TRUE;
  844.  
  845.                                     if(ChangedPtr)
  846.                                         *ChangedPtr = TRUE;
  847.                                 }
  848.  
  849.                                 break;
  850.  
  851.                             case GAD_LOAD:
  852.  
  853.                                 SplitFileName(LastFastMacros,&DummyChar,DummyBuffer);
  854.  
  855.                                 LT_LockWindow(FastWindow);
  856.  
  857.                                 if(FileRequest = GetFile(FastWindow,LocaleString(MSG_FASTMACROPANEL_LOAD_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  858.                                 {
  859.                                     LT_SetAttributes(Handle,GAD_LIST,
  860.                                         GTLV_Labels,    ~0,
  861.                                     TAG_DONE);
  862.  
  863.                                     Selected = NULL;
  864.  
  865.                                     if(!LoadFastMacros(DummyBuffer,FastMacroList))
  866.                                         ShowError(FastWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  867.                                     else
  868.                                     {
  869.                                         if(LocalConfig)
  870.                                             strcpy(LocalConfig -> FastMacroFileName,DummyBuffer);
  871.  
  872.                                         strcpy(LastFastMacros,DummyBuffer);
  873.  
  874.                                         Changed = TRUE;
  875.  
  876.                                         if(ChangedPtr)
  877.                                             *ChangedPtr = FALSE;
  878.                                     }
  879.  
  880.                                     LT_SetAttributes(Handle,GAD_LIST,
  881.                                         GTLV_Labels,    FastMacroList,
  882.                                         GTLV_Selected,    ~0,
  883.                                     TAG_DONE);
  884.  
  885.                                     LT_SetAttributes(Handle,GAD_CODE,
  886.                                         GTST_String,    "",
  887.                                         GA_Disabled,    TRUE,
  888.                                     TAG_DONE);
  889.  
  890.                                     LT_SetAttributes(Handle,GAD_MACRO,
  891.                                         GTST_String,    "",
  892.                                         GA_Disabled,    TRUE,
  893.                                     TAG_DONE);
  894.  
  895.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  896.                                         GA_Disabled,    TRUE,
  897.                                     TAG_DONE);
  898.  
  899.                                     LT_SetAttributes(Handle,GAD_TOP,
  900.                                         GA_Disabled,    TRUE,
  901.                                     TAG_DONE);
  902.  
  903.                                     LT_SetAttributes(Handle,GAD_UP,
  904.                                         GA_Disabled,    TRUE,
  905.                                     TAG_DONE);
  906.  
  907.                                     LT_SetAttributes(Handle,GAD_DOWN,
  908.                                         GA_Disabled,    TRUE,
  909.                                     TAG_DONE);
  910.  
  911.                                     LT_SetAttributes(Handle,GAD_END,
  912.                                         GA_Disabled,    TRUE,
  913.                                     TAG_DONE);
  914.  
  915.                                     LT_SetAttributes(Handle,GAD_SAVE,
  916.                                         GA_Disabled,    !FastMacroCount,
  917.                                     TAG_DONE);
  918.  
  919.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  920.                                         GA_Disabled,    !FastMacroCount,
  921.                                     TAG_DONE);
  922.  
  923.                                     FreeAslRequest(FileRequest);
  924.                                 }
  925.  
  926.                                 LT_UnlockWindow(FastWindow);
  927.  
  928.                                 break;
  929.  
  930.                             case GAD_SAVE:
  931.  
  932.                                 if(Selected)
  933.                                 {
  934.                                     strcpy(Selected->mn_Macro,LT_GetString(Handle,GAD_MACRO));
  935.                                     strcpy(Selected->mn_Code,LT_GetString(Handle,GAD_CODE));
  936.                                 }
  937.  
  938.                                 SplitFileName(LastFastMacros,&DummyChar,DummyBuffer);
  939.  
  940.                                 LT_LockWindow(FastWindow);
  941.  
  942.                                 if(FileRequest = GetFile(FastWindow,LocaleString(MSG_FASTMACROPANEL_SAVE_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  943.                                 {
  944.                                     if(!SaveFastMacros(DummyBuffer,FastMacroList))
  945.                                         ShowError(FastWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  946.                                     else
  947.                                     {
  948.                                         strcpy(LastFastMacros,DummyBuffer);
  949.  
  950.                                         if(LocalConfig)
  951.                                             strcpy(LocalConfig->FastMacroFileName,LastFastMacros);
  952.  
  953.                                         if(ChangedPtr)
  954.                                             *ChangedPtr = FALSE;
  955.                                     }
  956.  
  957.                                     FreeAslRequest(FileRequest);
  958.                                 }
  959.  
  960.                                 LT_UnlockWindow(FastWindow);
  961.  
  962.                                 break;
  963.                         }
  964.                     }
  965.                 }
  966.             }
  967.             while(!Done);
  968.  
  969.             PopWindow();
  970.         }
  971.  
  972.         LT_DeleteHandle(Handle);
  973.     }
  974.  
  975.     return(Changed);
  976. }
  977.